home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Software Vault: The Diamond Collection
/
The Diamond Collection (Software Vault)(Digital Impact).ISO
/
cdr48
/
asm32v20.zip
/
MODE.DOC
< prev
next >
Wrap
Text File
|
1993-12-07
|
15KB
|
412 lines
**************************** VIDEO MODES ***********************************
ASM32 video mode subroutines (C) Copyright 1993 Douglas Herr
All rights reserved
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
HGRAPH: establishes Hercules graphics mode, pages 0 & 1
HGRAPH0: establishes Hercules graphics mode, clear page 0 only
Source: hgraph.asm ($herc.asm, $hmode.asm)
Hercules or compatible required
(including Hercules InColor)
Call with: no parameters
Returns: if CF = 1, no Hercules installed
if CF = 0, AX = code for Hercules model
128 = HGC
144 = HGC+
208 = InC
Uses: AX, ECX, CF
Supports: Hercules graphics cards and compatibles: graphics mode
see also Use64k in SYSTEM.DOC
Example: call hgraph ; establish graphics mode
jc no_hercules ; drat!
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
HRAM8029: establish an 80-column, 29-row RamFont mode, loading a
standard 8x12 character font in RAM
Source: hram8029.asm ($herc.asm, $hmode.asm, $h8x12.asm, f8x12rle.asm,
$rld.asm)
HRAM8043: establish an 80-column, 43-row RamFont mode, loading a
standard 8x8 character font in RAM
Source: hram8043.asm ($herc.asm, $hmode.asm, $h8x8.asm, f8x8.asm)
HRAM9025: establish a 90-column, 25-row RamFont mode using
standard ROM characters
Source: hram9025.asm ($herc.asm, $hmode.asm)
HRAM9029: establish a 90-column, 29-row RamFont mode, loading a
standard 8x12 character font in RAM
Source: hram9029.asm ($herc.asm, $hmode.asm, $h8x12.asm, f8x12lre.asm,
$rld.asm)
HRAM9043: establish a 90-column, 43-row RamFont mode, loading a
standard 8x8 character font in RAM
Source: hram9043.asm ($herc.asm, $hmode.asm, $h8x8.asm, f8x8.asm)
Hercules RamFont card required
(including Hercules InColor)
Note: use htext to restore normal 80 x 25 text mode
Call with: no parameters
Returns: if CF = 1, no RamFont card installed
if CF = 0, AX = code for Hercules model
144 = HGC+
208 = InC
Uses: AX, CF; all other flags and registers are saved
Supports: HGC+ and InC cards: 4k RamFont mode
Example: call hram8043 ; RamFont mode: 80x43
jc no_ramfont ; drat!
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
HTEXT: establish (or restore) Hercules text mode
Source: htext.asm ($herc, $hmode)
Call with: no parameters
Returns: if CF = 1, no Hercules installed
if CF = 0, AX = code for Hercules model
128 = HGC
144 = HGC+
208 = InC
Uses: AX, CF
Supports: Hercules graphics cards and compatibles: text mode
(including Hercules InColor)
Example: call htext ; Hercules text mode
jc no_herc ; drat!
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
TOCOLOR: switches system to color text mode; may be used to switch
monitors on a 2-monitor system, or to switch to the standard
80-column, 25-rows color mode from other color modes
Source: tocolor.asm ($6845.asm)
Call with: no parameters
Returns: CF = 1 if no color monitor
CF = 0 if successful
Uses: CF; all registers and all other flags are saved
Example:
extrn tocolor:near
include codeseg.inc
.
.
.
call tocolor
jc no_color
.
.
.
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
TOMONO: switches system to monochrome text mode; may be used either
to switch active monitors on a 2-monitor sysem or to switch
to monchrome text mode (80x25) from graphics mode (EGA or
Hercules).
Source: tocolor.asm ($6845.asm)
Call with: no parameters
Returns: CF = 1 if no monochrome or InColor monitor
CF = 0 if successful
Uses: CF; all registers and all other flags are saved
Example:
extrn tomono:near
include codeseg.inc
.
.
.
call modemono
jc no_mono
.
.
.
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
MODE43: switch EGA to 80x43 text mode or VGA to 80x50 text mode
Mode43 switches an EGA to the 80-column, 43-row text mode from
any color mode or any EGA monochrome mode, or switches a color
VGA to 80x50 text mode from any other color mode.
Source: mode43.asm
Call with: no parameters
Returns: if CF = 1, AX = 0 if no EGA or VGA in system
AX = -1 if EGA connected to CGA monitor
if CF = 0, AX = 3 if EGA or VGA connected to color monitor
AX = 7 if EGA or VGA connected to monochrome monitor
Uses: AX, CF; all other registers and flags are saved
Example: call mode43
jc noega
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
SVGA132: set 132-column text mode on supported SEGA and SVGA systems
Source: svga132.asm ($sega.asm, $svga.asm)
Call with: AX = mode number
0 = 25 rows
1 = 30 rows (approx)
2 = 43 rows (approx)
3 = 50 rows (SVGA only)
4 = 60 rows (SVGA only)
Returns: if CF = 0, no error
if CF = 1, mode not supported
Uses: flags
Example:
include model.inc
public set132mode
extrn svga132:near
include codeseg.inc
set132mode proc near
mov ax,4
try_to_set_mode:
call svga132
jnc short all_done ; all done if it worked
sub ax,1 ; else try next lower mode number
jnc try_to_set_mode ; unless modes exhausted
; then exit with CF = 1
all_done:
ret
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
SVGA16: set Super VGA mode
Source: svga16.asm (banks.asm, $graph.asm)
Call with: AX = 16-color mode desired
AX = 0 for 800x600
AX = 1 for 1024x768
ASM32's SVGA subroutines are derived from John Bridges'
public domain VGAKIT board identification and bank switching code.
Boards supported are:
Ahead Technologies
ATI
Chips & Technologies
Everex
Genoa GVGA
NCR
Oak Technologies
Paradise (Western Digital)
Trident
Trident 8900
Tseng (Genoa, Orchid, Willow)
Tseng 4000
VESA standard
Video 7
I have not been able to test SVGA16 on all boards; please
let me know if you encounter difficulties.
Returns: if CF = 0, AX = extended BIOS mode number
if CF = 1, requested mode is not available
SVGA16 cannot determine if the monitor you are using will
work with the requested mode. Monitor damage may result
from improper use of SVGA16.
Example:
public mygraph
extrn whichvga:near, svga16:near
include codeseg.inc
mygraph proc near
; I want to use a 16-color 1024x768 mode if available
; start by calling WhichVGA to determine if the equipment is capable
call whichvga
or ax,ax ; SuperVGA installed?
jz no_svga ; nope, use some other mode
mov ax,1 ; specify 1024x768 mode
call svga16
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
SVGA256: set Super VGA 256-color mode
Source: svga256.asm (banks.asm)
Call with: AX = 256-color mode desired
AX = 0 for 640x400
AX = 1 for 640x480
AX = 2 for 800x600
AX = 3 for 1024x768
ASM32's SVGA256 subroutines are derived from John Bridges'
public domain VGAKIT board identification and bank switching code.
Equipment supported is listed under SVGA16, plus:
Compaq (640x480 only)
Returns: if CF = 0, AX = extended BIOS mode number
if CF = 1, requested mode is not available
SVGA256 cannot determine if the monitor you are using will
work with the requested mode. Monitor damage may result
from improper use of SVGA256.
Example: see SVGA16
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
VGA13X: changes standard VGA systems to undocumented 256-color graphics
modes. ASM32 graphics subroutines support 4 VGA13X modes
with up to 4 pages. See also XModeClear.
VGA13X is derived from public domain code from John Bridges
and Themie Gouthas.
Source: vga13x.asm (crtc.13x, $graph.asm)
Call with: AX = VGA13X mode number
0 = 320 x 200, 4 pages
1 = 320 x 240, 3 pages
2 = 320 x 400, 2 pages
3 = 360 x 480, 1 page
Returns: nothing
Uses: nothing
Supports: VGA or SVGA only: graphics mode
Example:
extrn vga13x:proc
include codeseg.inc
.
.
.
call getcrt
cmp al,3
jne short oops ; do something else if no VGA
mov ax,2 ; 320 x 400, 2 pages
call vga13x
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
XMODE16: establish SuperEGA/SuperVGA graphics mode and configure
ASM32 graphics subroutines to work with the mode.
XMODECLEAR: restore ASM32's default graphics configuration
Source: xmode16.asm ($graph.asm)
Parameters: maximum x, maximum y, registers as required to set mode.
XMode16 assumes that the mode is set with AH = 0.
Returns: nothing
Uses: All registers and flags saved.
Supports: 16-color EGA/VGA-style graphics modes, up to 800 x 600 pixels.
Various equipment. You must have the required equipment and
use the correct mode number; hardware damage may result from
improper use of XMode16. I cannot be held responsible for
damage resulting from use or misuse of XMode16. Use XMode16
if your equipment is not supported by SVGA16.
If 800 horizontal pixels are available, maxX% should be 799.
Similarly, if 600 vertical pixels are possible, maxY% should
be 599.
Your graphics card manual lists mode numbers, monitor
requirements, and the number of horizontal and vertical
pixels corresponding to the mode. Mode numbers are usually
in hex format. Some modes and corresponding mode numbers
are listed on the next pages.
Equipment mode mode number Example
Orchid ProDesigner 800x600 29h mov ax,799
STB EM/16 push ax
Genoa mov ax,599
Sigma X16 push ax
(Tseng chip set) mov al,29h
call xmode16
Everex MED EGA 640X480 AL = 70h, BL = 00h
(Micro Enhancer Deluxe)
752x410 AL = 70h, BL = 01h
mov ax,751
push ax
mov ax,409
push ax
mov al,70h
mov bl,01h
call xmode16
ATI VGA Wonder 800x600 54h mov ax,799
push ax
mov ax,599
push ax
mov al,54h
call xmode16
ATI VIP 800x560 53h mov ax,799
push ax
mov ax,559
push ax
mov al,53h
call xmode16
(continued)
Paradise Plus-16 800x600 58h mov ax,799
Paradise Professional push ax
mov ax,599
push ax
mov al,58h
call xmode16
Video 7 Fastwrite 800x600 62h mov ax,799
Video 7 VRAM push ax
mov ax,599
push ax
mov al,62h
call xmode16
Western Digital 800x600 6Ah (color) mov ax,799
6Bh (mono) push ax
(VESA modes) mov ax,599
push ax
mov al,6Ah ; color
call xmode16
If any of this information conflicts with the specifications in your
video card's instruction manual, the manual's recommendation is a safer
bet. Note that all the above modes require a multi-frequency monitor.
When you're all done with Graphics mode, CALL ModeColor to return to
80x25 text mode, and CALL XModeClear to reset ASM32's graphics mode
flags.